5 ONERRORGOTO2000 10 CLS:MODE8:DIM:a=1:x=0:y=0:c$=CHR$(5):p=2^31:q=2^32:r=0:x$=" 0":ERASEa$,b$:DIMa$(5),b$(15) 40 RESTORE70 50 FORi=0 TO5:READa$(i):NEXT 60 FORi=0 TO15:READb$(i):NEXT 70 DATABIN,DEC,HEX,AND,OR,XOR 80 DATA0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111 110 CLS:GOSUB300 120 z=LEN(x$):LOCATE0,0:IFz<17 THENPRINTc$;"[";a$(a);"] ";x$;ELSEPRINTc$;x$; 130 IFr>16 THENGOSUB300 140 r=z:LOCATE31,1 150 f=ASC(INPUT$(1)):IFf>96 THENf=f-32 160 IFf=73 THENGOSUB440:GOSUB290:GOTO330 170 IFf=66 ANDa<>0 THENa=0:GOTO330 180 IFf=68 ANDa<>1 THENa=1:GOTO330 190 IFf=72 ANDa<>2 THENa=2:GOTO330 200 IFf=42 ORf=43 ORf=45 ORf=47 THENGOSUB460:GOSUB290:GOTO800 210 IFf=65 ORf=79 ORf=88 THENGOSUB480:GOSUB290:GOTO900 220 IFf=76 ORf=82 THENGOSUB290:GOTO1040 230 IFf=78 ORf=67 THENGOSUB290:GOTO1100 240 IFf=46 THEN1200 250 GOTO150 270 LOCATE0,0:PRINTc$;"not found";:z$=INPUT$(1,@):RETURN 290 LOCATE0,0:PRINTc$; 300 LOCATE0,1:PRINT">I,B,D,H,+,-,*,/,A,O,X,N,C,L,R?";:RETURN 330 ONa+1 GOSUB360,350,360:GOTO120 350 x$=STR$(x):RETURN 360 IFx<0 THENt=x+q ELSEt=x 370 s=INT(t/65536):t=t-s*65536:x$=HEX$(s)+HEX$(t):IFa=2THENRETURN 380 y$="":FORi=1 TO8:y$=y$+b$(VAL("&H"+MID$(x$,i,1))):NEXT:x$=y$:RETURN 440 m$="Input data x (,B,D,H) ["+a$(a)+"] x ?":GOSUB550:x=y:RETURN 460 IFa>0 THENm$="["+a$(a)+"] " ELSEm$="" 465 m$=m$+x$+" "+CHR$(f)+" ":GOSUB550:RETURN 480 IFa>0 THENm$="["+a$(a)+"] " ELSEm$="" 485 m$=m$+x$+" "+a$(SGN(f-79)+4)+" ":GOSUB550:RETURN 550 CLS:PRINTm$;:INPUT@34;z$:LOCATE0,0:IFz$="" THENy=x:RETURN 560 l=LEN(z$):IFl>34 THENz$=LEFT$(z$,34) 570 d=a:c=l:IFl<2 THEN630 580 a$=MID$(z$,l-1,1) 590 IFa$="," ORa$="/" THENc=l-2:d=ASC(RIGHT$(z$,1)):z$=LEFT$(z$,c) ELSE630 600 IFd>96 THENd=d-32 610 IFd=66 ORd=68 ORd=72 THENd=SGN(d-68)+1 ELSE550 630 y=0:ONd+1 GOTO670,710,750 650 IFy<-p ORy>q-1 THEN550 ELSEIFy>=p THENy=y-q 660 RETURN 670 FORi=1TOc:z=ASC(MID$(z$,i,1))-48:IFz=0ORz=1THENy=y*2+z ELSE550 680 NEXT:GOTO650 710 e=0:w=0:FORi=1TOc:z=ASC(MID$(z$,i,1)) 720 IF(z>47 ANDz<58) ORz=45 ORz=43 ORz=69 THEN730 ELSE550 730 IFw=0 THENy=INT(VALF(z$)):w=1:IFe=1 THEN550 740 NEXT:GOTO650 750 FORi=1 TOc:z=ASC(MID$(z$,i,1)):IFz>96 THENz=z-32 760 z=z-48:IFz<0 ORz>9 THENz=z-7:IFz<10 ORz>15 THEN550 770 y=y*16+z:NEXT:GOTO650 800 ONf-41 GOSUB840,850,,860,,870 810 IFw>=p ORw<-p THENGOSUB270:GOTO120 ELSEx=w:GOTO330 840 w=x*y:RETURN 850 w=x+y:RETURN 860 w=x-y:RETURN 870 w=FIX(x/y):RETURN 900 IFx<0 THENx=x+q 910 IFy<0 THENy=y+q 920 u=x-INT(x/65536)*65536:v=y-INT(y/65536)*65536:GOSUB950:z=u 930 u=INT(x/65536):v=INT(y/65536):GOSUB950:x=z+u*65536:IFx>=p THENx=x-q 940 GOTO330 950 IFu>32767 THENu=u-65536 960 IFv>32767 THENv=v-65536 970 IFf=65 THENu=u ANDv ELSEIFf=79 THENu=u ORv ELSEu=u XORv 980 IFu<0 THENu=u+65536 990 RETURN 1040 IFx<0 THENx=x+q 1050 IFf=76 THENx=x*2 ELSEx=INT(x/2) 1060 IFx>=q THENx=x-q 1070 IFx>=p THENx=x-q 1080 GOTO330 1100 IFf=78 THENx=-x-1 ELSEIFx>-p THENx=-x 1110 GOTO330 1200 CLS:GOSUB1300:i=2 1210 PRINT:ONi GOSUB1300,1310,1320,1330,1340,1350,1360,1370,1380,1390,1400,1410,1420,1430,1440 1220 z=ASC(INPUT$(1,@)):IFz=28 ORz=29 THEN110 1230 IFz<>13 ANDz<>30 ANDz<>31 THEN1220 1240 IF(z=30 ANDi=1) OR(z=31 ANDi=15) THEN1220 1250 IFz=30 THENi=i-2 1270 i=i+1:IFi<16 THEN1210 1280 GOTO110 1300 PRINT" I : input data";:RETURN 1310 PRINT" B : binary mode";:RETURN 1320 PRINT" D : decimal mode";:RETURN 1330 PRINT" H : hexadecimal mode";:RETURN 1340 PRINT" + : addition";:RETURN 1350 PRINT" - : subtraction";:RETURN 1360 PRINT" * : multiplication";:RETURN 1370 PRINT" / : division";:RETURN 1380 PRINT" A : AND";:RETURN 1390 PRINT" O : OR";:RETURN 1400 PRINT" X : XOR";:RETURN 1410 PRINT" N : NOT";:RETURN 1420 PRINT" C : 2's complement";:RETURN 1430 PRINT" L : bit shift left";:RETURN 1440 PRINT" R : bit shift right";:RETURN 2000 IFERR=1 THENCLS:ONERRORGOTO0 2010 IFERL>=840 ANDERR=<870 THENGOSUB270:RESUME120 2020 IFERL=730 THENe=1:RESUMENEXT 2030 GOSUB270:RESUME110